package com.lwc.cfdns.annotation;

import com.lwc.cfdns.constants.Constants;
import com.lwc.cfdns.enums.LimitType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流注解
 * 例： @RateLimit(limit = 10l, expire = 60, limitType = LimitType.IP)
 *
 * @author luwc
 * @title RateLimit
 * @description
 * @time 2023/8/10 15:32:56
 * @version: 1.0
 */
@Target({ElementType.METHOD, ElementType.TYPE}) // 表示此注解可以在类和主法上
@Retention(RetentionPolicy.RUNTIME) // 运行时生效
public @interface RateLimit {
    //限流键名
    public String key() default Constants.RATE_LIMIT_KEY;

    //时间内限流次数
    public long limit() default 100l;

    // 限流时间 秒
    public long expire() default 60l;

    /**
     * 限流的类型(用户自定义key或者请求ip)
     */
    public LimitType limitType() default LimitType.CUSTOMER;

    // 超过后锁定IP时间　秒
    public long lockExpire() default 3600l;
}
